package com.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.vo.OuterUser;
import com.vo.User;

//使用基本的Java类 完成控制器的操作
@Controller
class SpringmvcController03 {
	//1.创建一个简单参数的提交方法
	@RequestMapping("inputParam")   
	//直接进行参数的提交 --- 提交的参数名和接受的参数名一致
	public String paramSubmit(String username,int age){ 
	//SpringMVC的数据类型是可以自动进行转换 ,接受的参数的名称和页面中的参数名要求一致
		System.out.println("提交的参数是"+username+"  "+(age+1));
		return "index.jsp"; //默认的是相对路径的跳转
		
	}
	
	//2.单值的提交,提交的参数名和接受的参数名不符
	@RequestMapping("inputParam1")   
	//直接进行参数的提交 --- 提交的参数名和接受的参数名一致 和中文的过滤
	/**
	 *  value=对应页面的提交的参数
	 *  required=此变量必须有值,不能为空
	 *  defaultValue=一旦提交的数据为空,则使用默认的缺省值
	 */
	public String paramSubmit1( @RequestParam(defaultValue="测试",required=true, value="username") String uname,
								@RequestParam(value="age")	int uage){
		System.out.println("提交的参数是"+uname+"  "+(uage+1));
		return "index.jsp"; //默认的是相对路径的跳转
		
	}
	
	//3.使用模型对象进行参数的接受
	@RequestMapping("inputParam2")   
	//直接进行参数的提交 --- 提交的参数名和接受的参数名一致 和中文的过滤
	public String paramSubmit2(User user ){
		//参数为对象,对象的中的属性名和页面提交的参数名一致
		System.out.println("提交的参数对象"+user);
		return "index.jsp"; //默认的是相对路径的跳转
		
	}
	/**
	 * 此处额外加入 字符编码的转换功能  中文编码的转换
	 */
	
	//4.第四种方式的数据提交 ,集合的提交
	@RequestMapping("inputParam3") 
	public String paramSubmit3(String username,int age,@RequestParam("hover")List<String> hover){
		System.out.println(username+" "+age+" "+hover); 
		return "index.jsp";
		}

	/**
	 *
	 *作业: 使用List<User> 接受多个对象
	 */
	
	//5.对象中嵌套对象
	@RequestMapping("inputParam4")   
	//直接进行参数的提交 --- 提交的参数名和接受的参数名一致 和中文的过滤
	public String paramSubmit4(OuterUser user ){ //SpringMVC的数据类型是可以自动进行转换 
		System.out.println("包含User對象的OuterUser对象"+user);
		return "index.jsp"; //默认的是相对路径的跳转
		
	}
	//6.对象中嵌套对象集合
	@RequestMapping("inputParam5")   
	//直接进行参数的提交 --- 提交的参数名和接受的参数名一致 和中文的过滤
	public String paramSubmit5(OuterUser user ){ //SpringMVC的数据类型是可以自动进行转换 
		System.out.println("包含User對象的OuterUser对象"+user);
		return "index.jsp"; //默认的是相对路径的跳转
		
	}
	//7. 超链接传参
	@RequestMapping("inputParam6/{id1}/{name}/{cla}")
	public String paramSubmit6(@PathVariable String name,@PathVariable("id1") int age)	{ 
		System.out.println(name +" "+age+"  "); 
		return "index.jsp";
		}




	/**
	 SpringMVC的跳转操作
	 */
	
	//8.默认的跳转操作
	/*
	 * 默认的跳转方式为 转发跳转
	 * */
	@RequestMapping("testResponse")
	public String response01( )	{ 
		 
		return  "redirect:show.jsp"; //重定向的跳转
		}

	/**
	 * JSON方式的响应
 	 	是以 Map结构 组成的一个字符串
	 */

	@RequestMapping("testResponse01")
	@ResponseBody
	public String response07( )	{ 
		 
		return  "测试Json的单值显示";
		}

	//Json的显示
	@RequestMapping("testResponseJson")
	@ResponseBody  //当前的请求 不进行跳转
	public User response02( )	{
		User user=new User();
		user.setAge(18);
		user.setUsername("张三");
		return user; 
		 
		
	}
	

	@RequestMapping("testResponseJson01")
	@ResponseBody
	public List<User> response03( )	{
		List<User> us=new ArrayList<User>();
		User user=new User();
		user.setAge(18);
		user.setUsername("张三");
		User user1=new User();
		user1.setAge(15);
		user1.setUsername("李四");
		us.add(user);
		us.add(user1);
		return us; 
		 
		
	}
	@RequestMapping("testResponseJson02")
	@ResponseBody
	public Map<String ,User> response04( )	{
		Map<String, User> us=new HashMap<String, User>();
		User user=new User();
		user.setAge(18);
		user.setUsername("张三");
		User user1=new User();
		user1.setAge(15);
		user1.setUsername("李四");
		us.put("1", user);
		us.put("2", user1);
		return us; 
		
		
	}
	
	
	
}
